#pragma once
#include <iostream>
#include <memory>
#include <atomic>
#include <print>
#include <chrono>

#include <boost/asio.hpp>
#include <nlohmann/json.hpp>

#include <yaml-cpp/yaml.h>

#include "sensorcollection.h"

class SensorTCPServer
{
private:
	uint16_t port;
	std::string host;
	SensorCollection sensor_collection;// 复用原有传感器逻辑
	std::atomic<bool> is_running{ true };
	std::mutex log_mutex;
	boost::asio::ip::tcp::acceptor* acceptor{ nullptr };  // 指针，延迟初始化


	void log(const std::string& msg) {
		std::lock_guard<std::mutex> lock(log_mutex);
		std::println("[time = {}, msg = {}]", __TIME__, msg);
	}

	// 辅助：解析 Python 指令（JSON）
	nlohmann::json parse_command(const std::string& cmd_str);

	// 核心：处理指令（映射到 SensorCollection 方法）
	nlohmann::json handle_command(const nlohmann::json& cmd);

	void handle_client(boost::asio::ip::tcp::socket& client);

	void load_config(const std::string& config_path);

public:
	SensorTCPServer(const std::string& config_path = "config/port.yaml") {
		load_config(config_path);  // 加载配置
	}

	~SensorTCPServer() {
		if (acceptor != nullptr) {
			delete acceptor;
		}
	}

	// 启动服务端（阻塞运行，直到调用 stop()）
	void start();

	// 停止服务端（外部调用，如信号处理）
	void stop();
};


